class AIV(object):
    """
    无人驾驶车类（样例），拥有以下属性
    - id 车辆标识符
    - status 车辆状态
    - position 车辆所在位置（位置点的序号）
    - coordinate 车辆所在的具体坐标
    - capacity 车辆的容量（能装的集装箱数量）
    - velocity 车的速度
    - battery 电量
    - info 字典格式返回车辆当前信息
    - track 经过的路径点
    - task 接到的任务
    """

    def __init__(self, properties: dict):
        """
        {
            'id':
            'position':
            'capacity':
            'velocity':
            'battery':
            'battery_cost_per_step':
        }
        """
        # 读取外部配置
        self._id         = properties.get('id')
        self._position   = properties.get('position',   21)
        self._capacity   = properties.get('capacity',    1)
        # 2x 的距离，分成了 x 个点去走，0.1 秒走一次， 车速为 2x / (x × 0.1) = 20
        self._velocity   = properties.get('velocity',   20)
        self._battery    = properties.get('battery' ,  100)

        # 具体坐标
        self._x = 0
        self._y = 0
        self._path = False
        # 收到的任务id
        self._task_id = None
        
        # 状态
        self._status = None

        self.__values = {}

    @property
    def id(self):
        return self._id

    @property
    def position(self):
        return self._position
    
    @property
    def coordinate(self):
        return {
            'x': self._x,
            'y': self._y
        }

    @property
    def status(self):
        return self._status
    
    @property
    def capacity(self):
        return self._capacity
    
    @property
    def velocity(self):
        return self._velocity
    
    @property
    def battery(self):
        return round(self._battery, 1)
    
    @property
    def track(self):
        return self._path

    @property
    def info(self):
        return {
            'id' : self._id,
            'taskid' : self._task_id,
            'status' : self.status,
            'battary' : self.battery,
            'position': self.position,
            'velocity' : self._velocity,
            'capacity' : self._capacity,
            'coordinate': self.coordinate
        }
    
    @property
    def init_info(self):
        return {
            'id' : self._id,
            'taskid' : self._task_id,
            'status' : self._status.name,
            'battary' : self.battery,
            'capacity' : self._capacity,
            'position': self._path[0] if self._path else self.coordinate
        }

    def __getitem__(self, key: str):
        return self._values[key]

    def __setitem__(self, key: str, value) -> None:
        self._values[key] = value
